package com.management.controller;

import com.management.dao.DeptDao;
import com.management.po.Company;
import com.management.po.Dept;
import com.management.po.Section;
import com.management.service.CompanyService;
import com.management.service.DeptService;
import com.management.service.SectionService;
import com.management.service.UserAndCompanyService;
import com.management.vo.DeptVO;
import com.management.vo.SectionVO;
import com.management.vo.UserAndCompanyVO;
import org.apache.ibatis.annotations.Param;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @category: 公司模块控制器
 * @author: cwsheng
 * @version: 1.0
 * @date: 2021/10/31 12:57
 */
@Controller
@RequestMapping("/company")
public class CompanyController {

    Logger logger = Logger.getLogger(CompanyController.class);

    @Autowired
    CompanyService companyService;
    @Autowired
    UserAndCompanyService userAndCompanyService;
    @Autowired
    DeptService deptService;
    @Autowired
    SectionService sectionService;

    /*查询公司信息 Company/Query/*/
    // 查询公司基本信息
    @RequestMapping("/query/companylist")
    public String CompanyList(int companyId, Model model){
        logger.info("进入了公司基本信息展示控制器");
        Company company = companyService.findByCompanyId(companyId);
        model.addAttribute("company",company);
        return "companylist";
    }
    // 查询公司部门信息
    @RequestMapping("/query/deptlist")
    public String DeptList(int companyId, Model model){
        logger.info("进入了公司部门信息展示控制器");
        // 根据公司编号查询部门信息
        List<DeptVO> list = deptService.findByCompanyId(companyId);
        model.addAttribute("list",list);
        return "deptlist";
    }

    // 查询公司该部门下的科室信息
    @RequestMapping("/query/sectionlist")
    public String SectionList(int deptId, Model model){
        logger.info("进入了公司部门下的科室信息展示控制器");
        // 根据部门编号查询科室信息
        List<SectionVO> list = sectionService.findByDeptId(deptId);
        System.out.println(list);
        System.out.println(list.size());
        model.addAttribute("list",list);
        return "sectionlist";
    }
    // 查询公司科室信息（公司下的所有科室）
    @RequestMapping("/query/companysectionlist")
    public String CompanySectionList(int companyId, Model model, HttpSession session){
        logger.info("进入了公司科室信息展示控制器");
        // 根据公司编号查询部门信息
        List<DeptVO> list = deptService.findByCompanyId(companyId);
        Company company = companyService.findByCompanyId(companyId);
        List<Map> sections = new ArrayList<Map>();
        // 若部门信息不为空，遍历部门信息
        if(list!=null){
            for(DeptVO dept : list){
                // 获取部门id
                int deptId = dept.getDeptId();
                System.out.println("部门id"+deptId);
                // 通过部门id查询科室信息
                List<SectionVO> selist = sectionService.findByDeptId(deptId);
                int sectionid;
                // 遍历科室信息
                for (SectionVO sectionVO : selist){
                    // 获取科室编号
                    sectionid = sectionVO.getSectionId();
                    System.out.println("部门名称："+sectionVO.getDeptName()+"\t科室名称："+sectionVO.getSectionName());
                    Map map = new HashMap();
                    map.put("dept",dept);
                    map.put("sectionVO",sectionVO);
                    sections.add(map);
                }
            }
        }
        session.setAttribute("company",company);
        model.addAttribute("sections",sections);
        return "companysectionlist";
    }
    /*修改公司信息 Company/Editor/*/
    // 修改公司基本信息

    // 修改公司部门信息
    @RequestMapping("/editor/toupdatedept")
    public String toUpdateDept(int deptId, Model model){
        logger.info("进入了去修改公司部门信息控制器");
        // 根据部门编号查询部门信息
        DeptVO deptVO = deptService.findByDeptId(deptId);
        model.addAttribute("deptVO",deptVO);
        return "updatedept";
    }
    @RequestMapping("/editor/updatedept")
    public String updateDept(Dept dept,HttpSession session){
        logger.info("进入了修改公司部门信息控制器");
        // 根据部门编号查询部门信息
        Object obj =  session.getAttribute("userAndCompanyVO");
        UserAndCompanyVO company = (UserAndCompanyVO)obj;
        int i = company.getCompanyId();
        boolean flag = deptService.update(dept);
        if(flag){
            return "redirect:http://localhost:8080/management/company/query/deptlist.action?companyId="+i;
        }else {
            return "404";
        }
    }
    // 添加部门信息
    @RequestMapping("/editor/toadddept")
    public String toaddDept(){
        logger.info("进入了去添加公司部门信息控制器");
        // 根据公司编号添加部门信息
        return "adddept";
    }
    @RequestMapping("/editor/adddept")
    public String addDept(Dept dept,Model model,HttpSession session){
        logger.info("进入了添加公司部门信息控制器");
        Object obj =  session.getAttribute("userAndCompanyVO");
        UserAndCompanyVO company = (UserAndCompanyVO)obj;
        int i = company.getCompanyId();
        // 根据部门对象添加部门信息
        boolean flag = deptService.add(dept);
        logger.debug(flag);
        return "redirect:http://localhost:8080/management/query/deptlist.action?companyId="+i;
    }
    // 添加科室信息
    @RequestMapping("/editor/toaddsection")
    public String toaddSection(){
        logger.info("进入了去添加公司部门科室信息控制器");
        // 根据公司编号添加部门信息
        return "addsection";
    }
    @RequestMapping("/editor/addsection")
    public String addSection(Dept dept,Model model,HttpSession session){
        logger.info("进入了添加公司部门科室信息控制器");
        Object obj =  session.getAttribute("userAndCompanyVO");
        UserAndCompanyVO company = (UserAndCompanyVO)obj;
        int i = company.getCompanyId();
        // 根据部门对象添加部门信息
        boolean flag = deptService.add(dept);
        logger.debug(flag);
        return "redirect:http://localhost:8080/management/query/sectionlist.action?deptId="+i;
    }
    // 去修改公司该部门下的科室信息
    @RequestMapping("/editor/toupdatesection")
    public String toUpdateSection(int sectionId, Model model){
        logger.info("进入了公司部门下的科室信息展示控制器");
        // 根据科室编号查询科室信息
        SectionVO sectionVO = sectionService.findBySectionId(sectionId);
        model.addAttribute("sectionVO",sectionVO);
        return "updatesection";
    }
    // 修改公司该部门下的科室信息
    @RequestMapping("/editor/updatesection")
    public String updateSection(Section section){
        logger.info("进入了公司部门下的科室信息展示控制器");
        // 根据部门编号查询科室信息
        boolean flag = sectionService.update(section);
        System.out.println("id"+section.getSectionId());
        System.out.println("名字"+section.getSectionName());
        if(flag){
            System.out.println("科室信息更新成功");
            int i = 2;
            return "redirect:http://localhost:8080/management/company/query/sectionlist.action?deptId="+i;
        }else {
            System.out.println("科室信息更新失败");
            return "404";
        }

    }


}
